<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <style></style>
  </head>
  <body>
    <div>
      <h1>Object.assign,对象扩展方法</h1>
      <p>1.将多个源对象中的属性复制到一个目标对象中,如果有相同属性就覆盖</p>
      <p>2.支持输入多个对象参数,第一个为目标对象</p>
    </div>
    <script>
      const source1 = {
        a: 123,
        b: 123,
      };
      const target = {
        a: 456,
        c: 456,
      };
      //Object.assign支持传入多个参数对象，第一个参数为目标对象,后面有相同的属性，前面的会被覆盖
      const result = Object.assign(target, source1);
      console.log(target); //a: 123 c: 456;b: 123;
      console.log(result); //a: 123 c: 456;b: 123;

      console.log(target === result); //true

      function func(obj) {
        //这种方法会改变同一地址的对象属性值
        // obj.name = "func obj";
        // console.log(obj); //{name: 'func obj'}

        //使用Object.assign,先将obj对象复制到空对象上去,就不会修改同一地址的对象属性
        const funcObj = Object.assign({}, obj);
        obj.name = "func obj";
        console.log(funcObj); //{name: "global obj"}
      }

      const obj = {
        name: "global obj",
      };

      func(obj);
      //   因为上面的函数修改了同一地址的对象属性值
      //console.log(obj); //{name: 'func obj'}
      console.log(obj); //;{name: "func obj"}
    </script>
  </body>
</html>
